Mastering Linux Top
1. 概念
Linux下的top
命令用于显示排序后的系统进程信息和系统的关键指标信息,默认按照pid
进行排序,该命令一般用于分析服务端的实时性能状况
使用top
命令后,整个界面会将信息分为两个板块,分别是前5行的系统基础信息,维度包含了CPU,运行内存等,然而页面的下部分主要由一个表格组成,表格中展示了各个进程的状态信息
除了以上的基本系统信息之外,top
还支持显示系统的负载平均值,通常我们通过负载平均值就能够得到系统的繁忙程度,另外还支持自定义展示系统信息,如筛选、排序以及一些常用的进程操作命令
2. 基础信息
如上所述,输入top
可以得到系统前5行所展示的基本信息:
- 第 1 行:展示了当前系统时间,其中
up 964 days, 2:20
表示系统已经运行了964天2小时20分钟,1 user
表示当前系统1个用户登录,最后的load average
参数则表示了系统的负载情况,三个数值分别表示了系统最近1, 5, 15分钟的系统负载,单核CPU的情况下,0.00表示没有任何负载,1.00则表示刚好满负载,超过1表示超负荷运行中,0.7左右的负载是一个比较理想的值,多核情况下,理想负荷值的计算方式则是CPUs * 0.7
- 第 2 行:展示了当前系统任务总数,其中
102 total
表示当前系统一共运行了102个进程,其中1 running
表示当前存在1个进程正在运行,100 sleeping
则表示有100个进程正在睡眠,0 stopped
则表示没有停止的进程数,1 zombie
则表示存在1个僵尸进程
僵尸进程:僵尸进程是系统中一种特殊的进程状态,意味着该进程不再工作,但是由于其父进程未正确地将其终止,导致存在部分占用的文件描述符,因此该进程依旧存在于系统的进程表中,直到其父进程确认其终止状态,通常发生在父进程没有正确地等待其子进程的终止状态,或者在父进程在子进程之前退出而未正确处理子进程的终止
第 3 行:从各个维度描述了CPU的占用情况
0.7 us
: 该指标表示用户态占用CPU运行时间的百分比为0.7%1.0 sy
: 该指标表示内核态占用CPU运行时间的百分比为1.0%0.0 ni
: 用户空间内改变过优先级的进程占用CPU百分比为0.0%98.3 id
: 该指标表示CPU处于空闲状态时间的百分比为98.3%0.0 wa
: 该指标表示CPU等待I/O操作完成的百分比,如果该指标过高,则表示磁盘 或者 其他I/O子系统存在瓶颈0.0 hi
: 硬中断「Hardware Interrupts」占CPU的百分比为0.0%0.0 si
: 软中断「Software Interrupts」占CPU的百分比为0.0%0.0 st
: 该指标表示虚拟机VM中的虚拟CPU从物理CPU中偷取的时间占总CPU时间的百分比,如果开启了虚拟化环境,该参数才有可能会出现,表示虚拟机需要与其他虚拟机竞争物理CPU资源的时间
第 4 行:从各个维度描述了系统运行内存的情况
1798924 total
: 表示可使用的物理内存(RAM)总量为1798924 KB76984 free
: 表示可使用的空闲物理内存为76984 KB971064 used
: 表示已使用的物理内存为971064 KB750876 buff/cache
: 用于磁盘缓存和文件系统缓存的内存总量,这部分内存通常被用于缓存文件系统数据,以便加快文件读取和写入操作,用于提升系统的性能
第 5 行:描述了与交换空间相关的信息
1048572 total
: 表示交换空间的总量为1048572 KB973096 free
: 表示当前未被使用的交换空间总量为973096 KB,系统可以将数据写入其中以便省出物理内存75476 used
: 表示当前正在使用的交换空间总量为75476 KB,表示已经写入交换分区的数据量
3. 进程信息
top
命令中的表格展示了系统中的进程信息,进程信息默认按照PID做升序排序,其中进程表格中各列的含义如下所示:
- PID:是进程的唯一标识符,即进程号「Process ID」,每个进程都有独一无二的PID
- USER:表示运行该进程的用户
- PR:是进程的优先级或调度的优先级「Priority」,较低的数字表示较高的优先级,而较高的数字则表示较低的优先级
- NI:进程的
nice
值,如果该值越低,则表示该进程的优先级越高,该值越高,则表示该进程的优先级越低(数字越小,进程越重要) - VIRT:进程所使用的虚拟内存总量,单位是KB,虚拟内存包含了物理内存 + 交换空间
- RES:全称是 Resident Set Size,表示当前进程占用物理内存的总量,单位是KB
- SHR:指的是进程占用工项内存的总量,单位是KB
- S:该列表示的是各个进程的状态,状态标识符如下所示
R
:表示进程正在运行中 (Running),正在使用CPU资源执行任务S
:表示进程处于休眠状态 (Sleeping), 即增在等待事件的发生,如等待I/O操作完成D
: 表示进程正在处于不可中断休眠状态 (Uninterruptible Sleep),表示进程正在执行不可中断的休眠,通常在等待系统关键资源时出现Z
: 僵尸进程 (Zombie),表示进程已经终止,但其父进程尚未确认其终止状态,因此该进程会保留在进程表中直至父进程被回收T
: 表示进程已经停止 (Stopped)t
: 表示进程已经停止 (Tracing Stop),但是这种停止一般是由于调试器追中而暂停的进程W
: 表示进程已经终止,但其退出状态尚未被回收,通常是由于父进程没有正确退出状态X
: 表示进程已经终止,与W
标识符的含义一致
- %CPU:进程CPU的使用率,表示进程一段时间内使用CPU的百分比
- %Mem:进程内存的使用率,表示进程一段时间内使用内存的百分比
- **TIME+ **:进程累计使用CPU的时间
- COMMAND:进程的命令名称,表示文件是通过哪个可执行文件进行的
4. 其他
在top
命令模式下,可以通过按键指令触发多种类型的命令,如下所示:
Shift + V
: 可以展示出进程层级调用关系M
: 可以切换内存和交换空间的不同展示样式Shift + P
: 可以将进程按照CPU的使用率进行降序排序Shift + M
: 可以将进程按照物理内存的使用率进行降序排序1
: 可以显示出各个CPU核心的负载情况Shift + W
: 将当前top
命令窗口的配置写入至~/.toprc
中,以便下次使用top
命令时依旧采用相同的配置?
: 显示top
命令的帮助文档Shift + H
: 可以切换至线程视图,方便跟踪具体进程内的线程情况u
: 根据用户名过滤进程,输入后,会要求输入要查看的用户名,然后按Enter键确认Space
: 刷新当前top列表k
: 输入进程号后杀死该进程r
: 重新调整进程的优先级,也就是进程的nice
值(数值越小,表示进程越重要)c
: 显示进程所执行的完整启动命令f
: 对进程表显示的列 或 排序方式进行调整d
: 对进程表的刷新时间进行调整